#ifndef AUDIOPLAYERWIDGET_H
#define AUDIOPLAYERWIDGET_H

#include <QWidget>
#include <QMediaPlayer>
#include <QPushButton>
#include <QLineEdit>
#include <QSpinBox>
#include <QLabel>
#include <QTimer>
#include <QSlider>
#include <QTextEdit>
#include <QPushButton>
#include <QProgressBar>
#include "TextToSpeechManager.h" // 添加文字转语音管理器头文件

// 定义刺激状态枚举
enum class StimulusState {
    Idle,       // 未播放
    Stimulating, // 刺激中
    Resting      // 静息中
};

class AudioPlayerWidget : public QWidget {
    Q_OBJECT
public:
    explicit AudioPlayerWidget(QWidget *parent = nullptr);

    // 音频播放控制方法
    int getVolume() const;
    bool isLoopEnabled() const;
    void setVolume(int volume);
    void setLoopEnabled(bool enabled);
    void setPlaybackRate(double rate);
    bool loadAudioFile(const QString &filePath);

    // 获取当前刺激状态
    StimulusState getStimulusState() const;

    // 获取进度
    int getStimulusProgress() const;

    // 获取刺激和静息持续时间
    int getStimulusDuration() const { return m_stimSpin->value(); }
    int getRestDuration() const { return m_restSpin->value(); }

    // 显示音频设置对话框
    void showAudioSettings();

signals:
    void audioEvent(const QString &event, qint64 timestamp); // 播放事件信号（"start"/"stop" 等）
    void stimulusStateChanged(StimulusState state); // 刺激状态变化信号
    void stimulusProgressChanged(int progress); // 刺激进度变化信号

public slots:
    void onSelectFile();    // 选择音频文件
    void onStartStop();     // 开始或停止刺激序列
    void onSpeakText();     // 播放文字转语音
    void onStopSpeaking();  // 停止文字转语音
    void onStartStimulus(); // 开始刺激
    void onStopStimulus();  // 停止刺激

private slots:
    void onPlaybackStateChanged(QMediaPlayer::PlaybackState state);
    void playStimulus();    // 开始播放刺激音频
    void stopStimulus();    // 停止播放刺激音频
    void onVolumeChanged(int value); // 音量变化响应
    void onTtsStateChanged(QTextToSpeech::State state); // TTS状态变化响应
    void updateProgressBar(); // 更新进度条

private:
    QMediaPlayer *m_player;
    QLineEdit *m_fileEdit;
    QPushButton *m_fileButton;
    QSpinBox *m_restSpin;
    QSpinBox *m_stimSpin;
    QSpinBox *m_repeatSpin;
    QPushButton *m_startButton;
    QPushButton *m_startStimulusButton; // 开始刺激按钮
    QPushButton *m_stopStimulusButton;  // 停止刺激按钮
    QSlider *m_volumeSlider;  // 音量滑块
    QLabel *m_volumeLabel;    // 音量标签
    QTimer m_restTimer;
    QTimer m_stimTimer;
    QTimer m_progressTimer;   // 进度更新定时器
    int m_currentCycle;
    int m_totalCycles;
    bool m_loopEnabled;      // 循环播放标志
    double m_playbackRate;    // 播放速率

    // 进度条相关
    QProgressBar *m_progressBar; // 刺激进度条
    QLabel *m_statusIndicator;   // 状态指示器
    int m_totalDuration;       // 总持续时间（毫秒）
    int m_remainingTime;       // 剩余时间（毫秒）
    StimulusState m_stimulusState; // 当前刺激状态
    int m_currentProgress;     // 当前进度百分比

    // 文字转语音相关
    TextToSpeechManager *m_ttsManager;
    QTextEdit *m_textEdit;
    QPushButton *m_speakButton;
    QPushButton *m_stopSpeakButton;
    QLabel *m_ttsStatusLabel;

    void setupTtsUi(); // 设置文字转语音UI
    void updateStatusIndicator(); // 更新状态指示器
};

#endif // AUDIOPLAYERWIDGET_H
